import os.path
import string
from pathlib import Path
from typing import Union


# IO
# 键盘 输入读取，并返回大写字母
# raw_input() 是 Python 2.x 版本中用于从用户获取输入的函数。
# 在 Python 3.x 中，raw_input() 更新为 input() 函数。
def keyboard_io() -> Union[str, int, None]:
    user_input = input("请输入用户名：")
    print(f"您输入的是:{user_input}")
    user_input_encode = ''
    for i in user_input:
        if i.isalpha():
            user_input_encode = user_input_encode + i.upper()
        else:
            user_input_encode = user_input_encode + i
    return user_input_encode


# 文件读取 按行读取并打印
"""
 open(file_path, mode, encoding=None)。
mode模式参数：
'r'：以只读模式打开文件，这是默认模式。
'w'：以写入模式打开文件，如果文件已存在会先清空内容，若不存在则创建新文件。
'a'：以追加模式打开文件，在文件末尾添加内容，若文件不存在则创建。
'b'：以二进制模式打开文件，可与其他模式结合使用，如'rb'表示以二进制只读模式打开。
'+'：以读写模式打开文件，同样可与其他模式结合，如'r+'表示以读写模式打开。
encoding编码参数:
常用encoding='utf-8'，不过要依据文件的实际编码进行调整

pathlib模块 Python 3.4+

with 语句-上下文管理器
自动获取资源：在进入 with 代码块时，自动调用资源的初始化方法
自动释放资源：在代码块结束后（无论是否发生异常），自动调用资源的清理方法
"""
def file_io_read(file_path_name: Union[str, Path], encoding='utf-8'):
    try:
        # 3.4+ Path模块
        #with file_path_name.read_text(encoding=encoding) as file:
        with open(file_path_name, 'r', encoding=encoding) as file:
            for line in file:
                print(line)
    except OSError as e:
        print(f"文件打开失败：{e}")
        # 异常向上抛
        raise
    pass


# 获取文件夹目录，并打印相关信息
# 查找指定文件是否存在
"""
出于学习使用3.3之前的 os 和 os.path 模块

"""
def file_io_dir(*,dir_path: Union[str, os.PathLike], find_filename:str,encoding='utf-8') ->bool:
    """
     检查目录是否存在，并查找指定文件

     Args:
         dir_path: 要检查的目录路径
         find_filename: 要查找的文件名
         encoding: 文件编码格式

     Returns:
         bool: 如果找到文件返回True，否则返回False

     Raises:
         FileNotFoundError: 当目录不存在时
    """

    if not os.path.exists(dir_path):
        raise
    if not os.path.isdir(dir_path):
        raise
    size=os.path.getsize(dir_path)
    atime=os.path.getatime(dir_path)
    print(f"该文件夹名称{os.path.basename(dir_path)},大小{size},最后访问时间{atime}")
    for filename in os.listdir(dir_path):
        if filename==find_filename:
            return True

    return False

# 写入文件
"""

"""
def file_io_write(*,dir_path: Union[str, os.PathLike], write_filename:str,encoding='utf-8'):
    if not os.path.exists(dir_path):
        os.makedirs(dir_path)
    if write_filename is None or not write_filename.strip():
        raise

    #a为追加模式
    with open(os.path.join(dir_path,write_filename),'w',encoding=encoding) as file:
        file.write("lao he is bitch, asshole it's pink, hand job for me  on knees,everyone so want fuck her pussy and asshole")

    pass

if __name__ == '__main__':
    # print(keyboard_io())
    #file_io_read(file_path_name="F:\pjxt备份\pg_hba.conf")
    # file_io_dir(dir_path="F:\pjxt备份",find_filename="pg_hba.conf")
    file_io_write(dir_path="F:\pjxt备份",write_filename="lao he asshole pussy is pink.json")
    pass
